This is a notebook, updated after the degrees of freedom crisis of May 7-9, 2018, aimed at doing a first-pass analysis of all Beetles data to-date in the same notebook.

All 23 capacities

US Adults: MTurk pilot

Maximal structure, oblimin rotation

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.

Minimizing BIC suggests retaining 3 factors: See 3-factor solution, above.

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

US Adults: not yet run

US Children: not yet run

GH Adults: not yet run

GH Children

Maximal structure, oblimin rotation

 A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.

Minimizing BIC suggests retaining 2 factors:

Joining, by = "factor"

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

TH Adults

Maximal structure, oblimin rotation

 A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 4 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 4 factors: See 4-factor solution, above.

Minimizing BIC suggests retaining 2 factors:

Joining, by = "factor"

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

TH Children

Maximal structure, oblimin rotation

 A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 4 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 4 factors: See 4-factor solution, above.

Minimizing BIC suggests retaining 3 factors:

Joining, by = "factor"

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

CH Adults: not yet run

CH Children: not yet run

VT Adults

Maximal structure, oblimin rotation

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.

Minimizing BIC suggests retaining 3 factors: See 3-factor solution, above.

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

VT Children

Maximal structure, oblimin rotation

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.

Minimizing BIC suggests retaining 2 factors:

Joining, by = "factor"

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

Congruence across sites and age groups

Master EFA

Joining, by = "factor"

Joining, by = "factor"

Joining, by = "factor"

Excluding “add and subtract numbers”

US Adults: MTurk pilot

Maximal structure, oblimin rotation

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.

Minimizing BIC suggests retaining 3 factors: See 3-factor solution, above.

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

US Adults: not yet run

US Children: not yet run

GH Adults: not yet run

GH Children

Maximal structure, oblimin rotation

 A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 2 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 2 factors: See 2-factor solution, above.

Minimizing BIC suggests retaining 2 factors: See 2-factor solution, above.

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

TH Adults

Maximal structure, oblimin rotation

Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.

Minimizing BIC suggests retaining 2 factors:

Joining, by = "factor"

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

TH Children

Maximal structure, oblimin rotation

 A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 4 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 4 factors: See 4-factor solution, above.

Minimizing BIC suggests retaining 3 factors:

Joining, by = "factor"

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

CH Adults: not yet run

CH Children: not yet run

VT Adults

Maximal structure, oblimin rotation

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 2 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors:

Joining, by = "factor"

Minimizing BIC suggests retaining 2 factors: See 2-factor solution, above.

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

VT Children

Maximal structure, oblimin rotation

 A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

4 factors, oblimin rotation

Joining, by = "factor"

Reduced structure, oblimin rotation

Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.

Minimizing BIC suggests retaining 2 factors:

Joining, by = "factor"

Clustering within reduced factor space

Attributions to characters

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

Congruence across sites and age groups

Master EFA

Joining, by = "factor"

convergence not obtained in GPFoblq. 1000 iterations used.Joining, by = "factor"

Joining, by = "factor"

Attributions to characters

Joining, by = c("subid", "character")
Column `subid` joining factor and character vector, coercing into character vectorJoining, by = c("subid", "character")
Joining, by = c("subid", "character")
Joining, by = c("subid", "character")
Column `character` joining factors with different levels, coercing to character vectorJoining, by = c("subid", "character")
Column `character` joining character vector and factor, coercing into character vector
convergence not obtained in GPFoblq. 1000 iterations used.Joining, by = "subid"

Demographics

LS0tCnRpdGxlOiAiQmVldGxlcyBtZWdhLWFuYWx5c2lzIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKVGhpcyBpcyBhIG5vdGVib29rLCB1cGRhdGVkIGFmdGVyIHRoZSBkZWdyZWVzIG9mIGZyZWVkb20gY3Jpc2lzIG9mIE1heSA3LTksIDIwMTgsIGFpbWVkIGF0IGRvaW5nIGEgZmlyc3QtcGFzcyBhbmFseXNpcyBvZiBhbGwgQmVldGxlcyBkYXRhIHRvLWRhdGUgaW4gdGhlIHNhbWUgbm90ZWJvb2suCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUYsIHdhcm5pbmc9RiwgY2FjaGU9RiwgbWVzc2FnZT1GKQpgYGAKCmBgYHtyIGxpYnJhcmllcywgaW5jbHVkZSA9IEZ9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShybXMpCmxpYnJhcnkoZGVuZGV4dGVuZCkKYGBgCgpgYGB7ciBmdW5jdGlvbnMsIGluY2x1ZGUgPSBGfQojIyBtYWtlIGZ1bmN0aW9uIHRvIGNsZWFuIHVwIGtpZCBkYXRhIGZyb20gVVMKY2xlYW5fZnVuIDwtIGZ1bmN0aW9uKGRmLCBrZXksIGV4X2ZpbmFsMyA9IFRSVUUsIGV4X2FkZHN1YiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgY2FwX2V4Y2x1ZGUgPSBOVUxMKSB7CiAgCiAgZGZfY2xlYW4gPC0gZGYgJT4lCiAgICBmdWxsX2pvaW4oa2V5KSAlPiUKICAgIGZpbHRlcighcXVlc3Rpb24gJWluJSBjYXBfZXhjbHVkZSwKICAgICAgICAgICAhaXMubmEoc3VibnVtKSwgIWlzLm5hKHF1ZXN0aW9uKSkgJT4lCiAgICBtdXRhdGUocmVzcG9uc2VOdW0gPSByZWNvZGUocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIiA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtpbmQgb2YiID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZXMiID0gMSksCiAgICAgICAgICAgcmVzcG9uc2VOdW0gPSBhcy5udW1lcmljKHJlc3BvbnNlTnVtKSkgJT4lCiAgICByZW5hbWUoY2FwYWNpdHkgPSBxdWVzdGlvbikgJT4lCiAgICBkaXN0aW5jdChzdWJudW0sIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICAjIyBtdXRhdGUoY2FwYWNpdHkgPSByZWNvZGUoY2FwYWNpdHksCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZCBhbmQgc3VidHJhY3QgbnVtYmVycyIgPSAiYWRkaXRpb25fc3VidHJhY3Rpb24iLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG9vc2Ugd2hhdCB0byBkbyIgPSAiY2hvaWNlIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBndWlsdHkiID0gImd1aWx0IiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBoYXBweSIgPSAiaGFwcGluZXNzIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBsb3ZlIiA9ICJsb3ZlIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBwYWluIiA9ICJwYWluIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBwcm91ZCIgPSAicHJpZGUiLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHNhZCIgPSAic2FkbmVzcyIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImZlZWwgc2NhcmVkIiA9ICJmZWFyIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBzaHkiID0gInNoeW5lc3MiLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHNpY2ssIGxpa2Ugd2hlbiB5b3UgZmVlbCBsaWtlIHlvdSBtaWdodCB2b21pdCIgPSAibmF1c2VhIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCB0aXJlZCIgPSAiZmF0aWd1ZSIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaW5ncyIgPSAiZmlndXJpbmdfb3V0IiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGFuZ3J5IiA9ICJhbmdlciIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCBodW5ncnkiID0gImh1bmdlciIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCBodXJ0IGZlZWxpbmdzIiA9ICJodXJ0X2ZlZWxpbmdzIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhciB0aGluZ3MiID0gImhlYXJpbmciLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmF5IiA9ICJwcmF5ZXIiLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1lbWJlciB0aGluZ3MiID0gIm1lbW9yeSIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNlIHRlbXBlcmF0dXJlcyIgPSAic2Vuc2luZ190ZW1wIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vuc2Ugd2hlbiB0aGluZ3MgYXJlIGZhciBhd2F5IiA9ICJzZW5zaW5nX2RlcHRoIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAic21lbGwgdGhpbmdzIiA9ICJzbWVsbCIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaW5rIGFib3V0IHRoaW5ncyIgPSAidGhvdWdodCIpKSAlPiUKICAgIHNwcmVhZChjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogICAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgICBjb2x1bW5fdG9fcm93bmFtZXMoInN1Ym51bSIpCiAgCiAgaWYoZXhfZmluYWwzKSB7CiAgICBkZl9jbGVhbiA8LSBkZl9jbGVhbiAlPiUgCiAgICAgIHNlbGVjdCgtYyhgYmxlZWQgaWYgdGhleSB0b3VjaCBzb21ldGhpbmcgc2hhcnBgLAogICAgICAgICAgICAgICAgYGhhdmUgbWluZHNgLCBgaGF2ZSBzb3Vsc2ApKQogIH0KCiAgaWYoZXhfYWRkc3ViKSB7CiAgICBkZl9jbGVhbiA8LSBkZl9jbGVhbiAlPiUgCiAgICAgIHNlbGVjdCgtYyhgYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzYCkpCiAgfQogIAogIHJldHVybihkZl9jbGVhbikKICAKfQoKIyMgbWFrZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgbWF4IG5fZmFjdG9ycywgZ2l2ZW4gbl9vYnMgdmFyaWFibGVzCm1heF9mYWN0X2Z1biA8LSBmdW5jdGlvbihwKSB7CiAgCiAgc19tb21lbnRzIDwtIGZ1bmN0aW9uKHApIHtwKihwKzEpLzJ9CiAgcGFyYW1fZXN0IDwtIGZ1bmN0aW9uKHAsIGspIHtwKmsgKyBwIC0gKGsqKGstMSkvMil9CiAgY2hlY2tfb2sgPC0gZnVuY3Rpb24ocCwgaykgewogICAgYSA8LSAocC1rKV4yCiAgICBiIDwtIHArawogICAgcmV0dXJuKGlmZWxzZShhPmIsIFRSVUUsIEZBTFNFKSkKICB9CiAgCiAgZGZfY2hlY2sgPC0gZGF0YS5mcmFtZSgpCiAgZm9yKGkgaW4gMTpwKXsKICAgIGRmX2NoZWNrW2ksImNoZWNrIl0gPC0gY2hlY2tfb2socCxpKQogIH0KICAKICBtYXggPC0gZGZfY2hlY2sgJT4lIGZpbHRlcihjaGVjaykgJT4lIG5yb3coKQogIHJldHVybihtYXgpCiAgCn0KCiMjIG1ha2UgZnVuY3Rpb24gdG8gaW1wbGVtZW50IGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEKcmV0ZW5fZmFjdF9mdW4gPC0gZnVuY3Rpb24oZGYsIHJvdCkgewogIAogIG1heF9lZmEgPC0gZmEoZGYsIG5mYWN0b3JzID0gbWF4X2ZhY3RfZnVuKG5jb2woZGYpKSwgcm90YXRlID0gIm5vbmUiKQogIG1heF92YWNjIDwtIG1heF9lZmEkVmFjY291bnRlZCAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3RhdCIpICU+JQogICAgZ2F0aGVyKGZhY3RvciwgdmFsdWUsIC1zdGF0KSAlPiUKICAgIHNwcmVhZChzdGF0LCB2YWx1ZSkgJT4lCiAgICBmaWx0ZXIoYFNTIGxvYWRpbmdzYCA+IDEsIGBQcm9wb3J0aW9uIEV4cGxhaW5lZGAgPiAwLjA1KQogIG5fcmV0ZW4xIDwtIG5yb3cobWF4X3ZhY2MpCiAgCiAgcmV0ZW5fZWZhIDwtIGZhKGRmLCBuZmFjdG9ycyA9IG5fcmV0ZW4xLCByb3RhdGUgPSByb3QpCiAgcmV0ZW5fbG9hZGluZ3MgPC0gcmV0ZW5fZWZhJGxvYWRpbmdzW10gJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm1jIikgJT4lCiAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtbWMpICU+JQogICAgZ3JvdXBfYnkobWMpICU+JQogICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgIHVuZ3JvdXAoKQogIG5fcmV0ZW4yIDwtIHJldGVuX2xvYWRpbmdzICU+JQogICAgY291bnQoZmFjdG9yKSAlPiUKICAgIG5yb3coKQogICAgCiAgcmV0dXJuKG5fcmV0ZW4yKQoKfQoKIyMgbWFrZSBmdW5jdGlvbiB0byBwbG90IGhlYXRtYXAgb2YgZmFjdG9yIGxvYWRpbmdzCmhlYXRtYXBfZnVuIDwtIGZ1bmN0aW9uKGRmLCBuX2ZhY3RvcnMsIHJvdCl7CiAgCiAgIyBkbyBlZmEKICBlZmEgPC0gZmEoZGYsIG5mYWN0b3JzID0gbl9mYWN0b3JzLCByb3RhdGUgPSByb3QpCiAgCiAgIyBnZXQgZmFjdG9yIGxvYWRpbmdzCiAgbG9hZGluZ3MgPC0gZWZhJGxvYWRpbmdzW10gJT4lCiAgICBmYS5zb3J0KCkgJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm1jIikgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm9yZGVyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSkgJT4lCiAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhtYywgb3JkZXIpKQogIAogICMgZ2V0IHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQKICB2YWNjIDwtIGVmYSRWYWNjb3VudGVkICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgICBmaWx0ZXIoc3RhdCA9PSAiUHJvcG9ydGlvbiBFeHBsYWluZWQiKSAlPiUKICAgIGdhdGhlcihmYWN0b3IsIHByb3BfdmFyLCAtc3RhdCkgJT4lCiAgICBzZWxlY3QoLXN0YXQpCiAgCiAgIyBwbG90IGl0IGFsbAogIHBsb3QgPC0gZ2dwbG90KGxvYWRpbmdzICU+JSAKICAgICAgICAgICAgICAgICAgIGZ1bGxfam9pbih2YWNjKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShsYWIgPSBwYXN0ZTAoZmFjdG9yLCAiICgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoMTAwKnJvdW5kKHByb3BfdmFyLCAyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUpIikpLAogICAgICAgICAgICAgICAgIGFlcyh4ID0gbGFiLCB5ID0gcmVvcmRlcihtYywgZGVzYyhvcmRlcikpLCBmaWxsID0gbG9hZGluZywgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSkpICsKICAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICAgIGdlb21fdGV4dChzaXplID0gMykgKwogICAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihsaW1pdHMgPSBjKC0xLCAxKSwgcGFsZXR0ZSA9ICJSZFlsQnUiLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICAgIHRoZW1lX21pbmltYWwoKQogIAogIHJldHVybihwbG90KQogIAp9CgojIyBtYWtlIGZ1bmN0aW9uIHRvIHBsb3QgY2x1c3RlcmluZyBvZiBtYXhpbWFsIGZhY3RvciBsb2FkaW5ncwpjbHVzdGVyX2Z1biA8LSBmdW5jdGlvbihkZiwgbl9mYWN0b3JzLCByb3QpewogIAogIGNsdXN0IDwtIGZhKGRmLCBuX2ZhY3RvcnMsIHJvdCkkbG9hZGluZ3NbXSAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIGRpc3QoKSAlPiUKICAgIGhjbHVzdCgpCiAgCiAgcCA8LSBjbHVzdCAlPiUKICAgIGFzLmRlbmRyb2dyYW0oKSAlPiUKICAgIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiLCAiI2ZmZmY5OSIsICIjYjE1OTI4IiksCiAgICAgICAgayA9IDYpICU+JQogICAgc2V0KCJicmFuY2hlc19sd2QiLCAwLjUpICU+JQogICAgYXMuZ2dkZW5kKCkgJT4lCiAgICBnZ3Bsb3QoaG9yaXogPSBGKSArCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMywgbWF4KGNsdXN0JGhlaWdodCkpKQogIAogIHJldHVybihwKQogIAp9CgojIyBtYWtlIGZ1bmN0aW9uIHRvIHBsb3QgY29uZ3J1ZW5jZSBhY3Jvc3Mgc2FtcGxlcwpsb2FkaW5nc19mdW4gPC0gZnVuY3Rpb24oZGYsIG5fZmFjdG9ycyA9IHJldGVuX2ZhY3RfZnVuKGRmLCAib2JsaW1pbiIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHJvdCA9ICJvYmxpbWluIiwgbGFiZWwpewogIGRfZWZhIDwtIGZhKGRmLCBuX2ZhY3RvcnMsIHJvdCkkbG9hZGluZ3NbXSAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICAgIGFycmFuZ2UoY2FwYWNpdHkpICU+JQogICAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpCiAgY29sbmFtZXMoZF9lZmEpIDwtIGdzdWIoIk1SIiwgcGFzdGUobGFiZWwsICJNUiIsIHNlcCA9ICJfIiksIGNvbG5hbWVzKGRfZWZhKSkKICByZXR1cm4oZF9lZmEpCn0KYGBgCgpgYGB7ciBrZXksIGluY2x1ZGUgPSBGfQpxdWVzdGlvbl9rZXkgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9UZW1wbGV0b24gR3JhbnQvREVWRUxPUE1FTlRBTCBUQVNLUy9iZWV0bGVzOmRpbWtpZDpmYWN0b3JzL2Rlc2lnbi9iZWV0bGVzIGNiLmNzdiIpCmBgYAoKIyBBbGwgMjMgY2FwYWNpdGllcwoKYGBge3IsIGluY2x1ZGUgPSBGLCB3YXJuaW5nID0gRkFMU0V9CiMgVVMgYWR1bHRzIFBJTE9UCmRfdXNfYWRfcGlsb3RfMjMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9UZW1wbGV0b24gR3JhbnQvREVWRUxPUE1FTlRBTCBUQVNLUy9iZWV0bGVzOmRpbWtpZDpmYWN0b3JzL2FuYWx5c2lzL19VUyBwaWxvdC9iZWV0bGVzX3BpbG90Ml90aWR5LmNzdiIpICU+JQogIGZpbHRlcihzY2FsZSA9PSAiYmVldGxlcyIpICU+JQogIGRpc3RpbmN0KHN1YmlkLCBxdWVzdGlvbiwgcmVzcG9uc2UpICU+JQogIGZpbHRlcighcXVlc3Rpb24gJWluJSBjKCJibGVlZCIsICJtaW5kIiwgInNvdWwiKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gcmVjb2RlKHF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkX3N1YnRyYWN0IiA9ICJhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5ncnkiID0gImdldCBhbmdyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgImJsZWVkIiA9ICJibGVlZCB3aGVuIHRoZXkgdG91Y2ggc29tZXRoaW5nIHNoYXJwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImNob29zZSIgPSAiY2hvb3NlIHdoYXQgdG8gZG8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlndXJlX291dCIgPSAiZmlndXJlIG91dCBob3cgdG8gZG8gdGhpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImd1aWx0eSIgPSAiZmVlbCBndWlsdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFwcHkiID0gImZlZWwgaGFwcHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhciIgPSAiaGVhciB0aGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiaHVuZ3J5IiA9ICJnZXQgaHVuZ3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImh1cnRfZmVlbGluZ3MiID0gImdldCBodXJ0IGZlZWxpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvdmUiID0gImZlZWwgbG92ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIm1pbmQiID0gImhhdmUgbWluZHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicGFpbiIgPSAiZmVlbCBwYWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInByYXkiID0gInByYXkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3VkIiA9ICJmZWVsIHByb3VkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbWVtYmVyIiA9ICJyZW1lbWJlciB0aGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2FkIiA9ICJmZWVsIHNhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY2FyZWQiID0gImZlZWwgc2NhcmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNlX2ZhciIgPSAic2Vuc2Ugd2hlbiB0aGluZ3MgYXJlIGZhciBhd2F5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNlX3RlbXAiID0gInNlbnNlIHRlbXBlcmF0dXJlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaHkiID0gImZlZWwgc2h5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpY2siID0gImZlZWwgc2ljaywgbGlrZSB3aGVuIHlvdSBmZWVsIGxpa2UgeW91IG1pZ2h0IHZvbWl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNtZWxsIiA9ICJzbWVsbCB0aGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAjICJzb3VsIiA9ICJoYXZlIHNvdWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaW5rIiA9ICJ0aGluayBhYm91dCB0aGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidGlyZWQiID0gImZlZWwgdGlyZWQiKSkgJT4lCiAgc3ByZWFkKHF1ZXN0aW9uLCByZXNwb25zZSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJpZCIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGLCB3YXJuaW5nID0gRkFMU0V9CiMjIFVTIGFkdWx0czogTk9UIFlFVCBSVU4KIyMgVVMgY2hpbGRyZW46IE5PVCBZRVQgUlVOCgojIyBHSCBhZHVsdHM6IE5PVCBZRVQgUlVOCiMjIEdIIGNoaWxkcmVuCmRfZ2hfY2hfMjMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfR0hBTkEvYmVldGxlc19naGFuYV9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGNsZWFuX2Z1bihrZXkgPSBxdWVzdGlvbl9rZXkpCgojIyBDSCBhZHVsdHM6IE5PVCBZRVQgUlVOCiMjIENIIGNoaWxkcmVuOiBOT1QgWUVUIFJVTgoKIyMgVEggYWR1bHRzCmRfdGhfYWRfMjMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVEhBSUxBTkQvYmVldGxlc190aGFpbGFuZF9hZHVsdHNfdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5KQojIyBUSCBjaGlsZHJlbgpkX3RoX2NoXzIzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1RIQUlMQU5EL2JlZXRsZXNfdGhhaWxhbmRfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5KQoKIyMgVlQgYWR1bHRzCmRfdnRfYWRfMjMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVkFOVUFUVS9iZWV0bGVzX3ZhbnVhdHVfYWR1bHRzX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgY2xlYW5fZnVuKGtleSA9IHF1ZXN0aW9uX2tleSkKIyMgVlQgY2hpbGRyZW4KZF92dF9jaF8yMyA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9WQU5VQVRVL2JlZXRsZXNfdmFudWF0dV9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGNsZWFuX2Z1bihrZXkgPSBxdWVzdGlvbl9rZXkpCmBgYAoKIyMgVVMgQWR1bHRzOiBNVHVyayBwaWxvdAoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuNH0KaGVhdG1hcF9mdW4oZF91c19hZF9waWxvdF8yMywgbWF4X2ZhY3RfZnVuKG5jb2woZF91c19hZF9waWxvdF8yMykpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVVMgQWR1bHRzIChNVHVyayBQaWxvdCkiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3VzX2FkX3BpbG90XzIzLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF91c19hZF9waWxvdF8yMywgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF91c19hZF9waWxvdF8yMywgcmV0ZW5fZmFjdF9mdW4oZF91c19hZF9waWxvdF8yMywgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVVMgQWR1bHRzIChNVHVyayBQaWxvdCkiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3VzX2FkX3BpbG90XzIzX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdXNfYWRfcGlsb3RfMjMpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdXNfYWRfcGlsb3RfMjNfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IFNlZSAzLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdXNfYWRfcGlsb3RfMjNfYmljIDwtIFZTUyhkX3VzX2FkX3BpbG90XzIzLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF91c19hZF9waWxvdF8yMykpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3VzX2FkX3BpbG90XzIzX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczogU2VlIDMtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX3VzX2FkX3BpbG90XzIzLCByZXRlbl9mYWN0X2Z1bihkX3VzX2FkX3BpbG90XzIzLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVVMgQWR1bHRzIChNVHVyayBQaWxvdCkiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyMgQXR0cmlidXRpb25zIHRvIGNoYXJhY3RlcnMKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpmYShkX3VzX2FkX3BpbG90XzIzLCA0LCAib2JsaW1pbiIpJHNjb3Jlc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RFVkVMT1BNRU5UQUwgVEFTS1MvYmVldGxlczpkaW1raWQ6ZmFjdG9ycy9hbmFseXNpcy9fVVMgcGlsb3QvYmVldGxlc19waWxvdDJfdGlkeS5jc3YiKSAlPiUKICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImJlZXRsZXMiKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSkgJT4lCiAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyIsICJjaGlja2VucyIsICJtaWNlIiwgImRvZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIiwgInBpZ3MiLCAiZ2hvc3RzIiwgIkdvZCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gTWVhbiwgeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIsIAogICAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoZ3VpZGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMsIDQtZmFjdG9yIHNvbHV0aW9uOiBVUyBBZHVsdHMgKE1UdXJrIFBpbG90KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKCiMjIFVTIEFkdWx0czogbm90IHlldCBydW4KCiMjIFVTIENoaWxkcmVuOiBub3QgeWV0IHJ1bgoKIyMgR0ggQWR1bHRzOiBub3QgeWV0IHJ1bgoKIyMgR0ggQ2hpbGRyZW4KCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CmhlYXRtYXBfZnVuKGRfZ2hfY2hfMjMsIG1heF9mYWN0X2Z1bihuY29sKGRfZ2hfY2hfMjMpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF9naF9jaF8yMywgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX2doX2NoXzIzLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX2doX2NoXzIzLCByZXRlbl9mYWN0X2Z1bihkX2doX2NoXzIzLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfZ2hfY2hfMjNfcGFyYWxsZWwgPC0gZmEucGFyYWxsZWwoZF9naF9jaF8yMykKYGBgCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF9naF9jaF8yM19wYXJhbGxlbCRuZmFjdGAgZmFjdG9yczogU2VlIDMtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF9naF9jaF8yM19iaWMgPC0gVlNTKGRfZ2hfY2hfMjMsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX2doX2NoXzIzKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKTWluaW1pemluZyBCSUMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfZ2hfY2hfMjNfYmljJHZzcy5zdGF0cyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJuZmFjdCIpICU+JSBmaWx0ZXIoQklDID09IG1pbihCSUMpKSAlPiUgc2VsZWN0KG5mYWN0KSAlPiUgYXMubnVtZXJpYygpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX2doX2NoXzIzLCAyLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWluaW1pemluZyBCSUM6IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX2doX2NoXzIzLCByZXRlbl9mYWN0X2Z1bihkX2doX2NoXzIzLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogR0ggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyMgQXR0cmlidXRpb25zIHRvIGNoYXJhY3RlcnMKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpmYShkX2doX2NoXzIzLCA0LCAib2JsaW1pbiIpJHNjb3Jlc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgbXV0YXRlKHN1YmlkID0gcGFzdGUoImdoYW5hIiwgc3ViaWQsIHNlcCA9ICJfIikpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtc3ViaWQpICU+JQogIGZ1bGxfam9pbihyZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9HSEFOQS9iZWV0bGVzX2doYW5hX2NoaWxkcmVuX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNlbGwgcGhvbmVzIiwgInJvY2tzIiwgImZsb3dlcnMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZXMiLCAiY2hpY2tlbnMiLCAibWljZSIsICJkb2dzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIsICJwaWdzIiwgImdob3N0cyIsICJHb2QiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGNoYXJhY3RlciwgeSA9IE1lYW4sIHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyLCAKICAgICAgICAgICAgIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX3BvaW50cmFuZ2UoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKGd1aWRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjYWIyZDYiLCAiIzZhM2Q5YSIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLCBjb2xvciA9ICJibGFjayIpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzLCA0LWZhY3RvciBzb2x1dGlvbjogR0ggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICJGYWN0b3Igc2NvcmUiKQpgYGAKCgojIyBUSCBBZHVsdHMKCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CmhlYXRtYXBfZnVuKGRfdGhfYWRfMjMsIG1heF9mYWN0X2Z1bihuY29sKGRfdGhfYWRfMjMpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IFRIIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgNCBmYWN0b3JzLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdGhfYWRfMjMsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogVEggQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF90aF9hZF8yMywgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9hZF8yMywgcmV0ZW5fZmFjdF9mdW4oZF90aF9hZF8yMywgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVEggQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF90aF9hZF8yM19wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX3RoX2FkXzIzKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3RoX2FkXzIzX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgNC1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3RoX2FkXzIzX2JpYyA8LSBWU1MoZF90aF9hZF8yMywgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfdGhfYWRfMjMpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF90aF9hZF8yM19iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdGhfYWRfMjMsIDIsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtaW5pbWl6aW5nIEJJQzogVEggQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX3RoX2FkXzIzLCByZXRlbl9mYWN0X2Z1bihkX3RoX2FkXzIzLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVEggQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMjIEF0dHJpYnV0aW9ucyB0byBjaGFyYWN0ZXJzCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZmEoZF90aF9hZF8yMywgNCwgIm9ibGltaW4iKSRzY29yZXNbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ0aGFpbGFuZCIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLXN1YmlkKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVEhBSUxBTkQvYmVldGxlc190aGFpbGFuZF9hZHVsdHNfdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpKSAlPiUKICBncm91cF9ieShjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjZWxsIHBob25lcyIsICJyb2NrcyIsICJmbG93ZXJzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGVzIiwgImNoaWNrZW5zIiwgIm1pY2UiLCAiZG9ncyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iLCAicGlncyIsICJnaG9zdHMiLCAiR29kIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjaGFyYWN0ZXIsIHkgPSBNZWFuLCB5bWluID0gTG93ZXIsIHltYXggPSBVcHBlciwgCiAgICAgICAgICAgICBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yKSArCiAgZ2VvbV9wb2ludHJhbmdlKCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbChndWlkZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSAiYmxhY2siKSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcywgNC1mYWN0b3Igc29sdXRpb246IFRIIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKCiMjIFRIIENoaWxkcmVuCgojIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA5LCBmaWcuYXNwID0gMC40fQpoZWF0bWFwX2Z1bihkX3RoX2NoXzIzLCBtYXhfZmFjdF9mdW4obmNvbChkX3RoX2NoXzIzKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiBUSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgNCBmYWN0b3JzLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdGhfY2hfMjMsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX3RoX2NoXzIzLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3RoX2NoXzIzLCByZXRlbl9mYWN0X2Z1bihkX3RoX2NoXzIzLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBUSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdGhfY2hfMjNfcGFyYWxsZWwgPC0gZmEucGFyYWxsZWwoZF90aF9jaF8yMykKYGBgCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF90aF9jaF8yM19wYXJhbGxlbCRuZmFjdGAgZmFjdG9yczogU2VlIDQtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF90aF9jaF8yM19iaWMgPC0gVlNTKGRfdGhfY2hfMjMsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX3RoX2NoXzIzKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKTWluaW1pemluZyBCSUMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdGhfY2hfMjNfYmljJHZzcy5zdGF0cyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJuZmFjdCIpICU+JSBmaWx0ZXIoQklDID09IG1pbihCSUMpKSAlPiUgc2VsZWN0KG5mYWN0KSAlPiUgYXMubnVtZXJpYygpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3RoX2NoXzIzLCAzLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWluaW1pemluZyBCSUM6IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX3RoX2NoXzIzLCByZXRlbl9mYWN0X2Z1bihkX3RoX2NoXzIzLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyMgQXR0cmlidXRpb25zIHRvIGNoYXJhY3RlcnMKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpmYShkX3RoX2NoXzIzLCA0LCAib2JsaW1pbiIpJHNjb3Jlc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgbXV0YXRlKHN1YmlkID0gcGFzdGUoInRoYWlsYW5kIiwgc3ViaWQsIHNlcCA9ICJfIikpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtc3ViaWQpICU+JQogIGZ1bGxfam9pbihyZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9USEFJTEFORC9iZWV0bGVzX3RoYWlsYW5kX2NoaWxkcmVuX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSkgJT4lCiAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyIsICJjaGlja2VucyIsICJtaWNlIiwgImRvZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIiwgInBpZ3MiLCAiZ2hvc3RzIiwgIkdvZCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gTWVhbiwgeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIsIAogICAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoZ3VpZGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMsIDQtZmFjdG9yIHNvbHV0aW9uOiBUSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKCiMjIENIIEFkdWx0czogbm90IHlldCBydW4KCiMjIENIIENoaWxkcmVuOiBub3QgeWV0IHJ1bgoKIyMgVlQgQWR1bHRzCgojIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA5LCBmaWcuYXNwID0gMC40fQpoZWF0bWFwX2Z1bihkX3Z0X2FkXzIzLCBtYXhfZmFjdF9mdW4obmNvbChkX3Z0X2FkXzIzKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiBWVCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3Z0X2FkXzIzLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfdnRfYWRfMjMsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdnRfYWRfMjMsIHJldGVuX2ZhY3RfZnVuKGRfdnRfYWRfMjMsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdnRfYWRfMjNfcGFyYWxsZWwgPC0gZmEucGFyYWxsZWwoZF92dF9hZF8yMykKYGBgCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF92dF9hZF8yM19wYXJhbGxlbCRuZmFjdGAgZmFjdG9yczogU2VlIDMtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF92dF9hZF8yM19iaWMgPC0gVlNTKGRfdnRfYWRfMjMsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX3Z0X2FkXzIzKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKTWluaW1pemluZyBCSUMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdnRfYWRfMjNfYmljJHZzcy5zdGF0cyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJuZmFjdCIpICU+JSBmaWx0ZXIoQklDID09IG1pbihCSUMpKSAlPiUgc2VsZWN0KG5mYWN0KSAlPiUgYXMubnVtZXJpYygpYCBmYWN0b3JzOiBTZWUgMy1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKIyMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmNsdXN0ZXJfZnVuKGRfdnRfYWRfMjMsIHJldGVuX2ZhY3RfZnVuKGRfdnRfYWRfMjMsICJvYmxpbWluIiksIHJvdCA9ICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBWVCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyMgQXR0cmlidXRpb25zIHRvIGNoYXJhY3RlcnMKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpmYShkX3Z0X2FkXzIzLCA0LCAib2JsaW1pbiIpJHNjb3Jlc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgbXV0YXRlKHN1YmlkID0gcGFzdGUoInZhbnVhdHUiLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1ZBTlVBVFUvYmVldGxlc192YW51YXR1X2FkdWx0c190aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlcikpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBnc3ViKCJjcmlja2V0cyIsICJiZWV0bGVzIiwgY2hhcmFjdGVyKSwKICAgICAgICAgY2hhcmFjdGVyID0gZ3N1YigiYmVldGxlcyIsICJiZWV0bGVzKiIsIGNoYXJhY3RlcikpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNlbGwgcGhvbmVzIiwgInJvY2tzIiwgImZsb3dlcnMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZXMqIiwgImNoaWNrZW5zIiwgIm1pY2UiLCAiZG9ncyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iLCAicGlncyIsICJnaG9zdHMiLCAiR29kIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjaGFyYWN0ZXIsIHkgPSBNZWFuLCB5bWluID0gTG93ZXIsIHltYXggPSBVcHBlciwgCiAgICAgICAgICAgICBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yKSArCiAgZ2VvbV9wb2ludHJhbmdlKCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbChndWlkZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjYjE1OTI4IiwgIiNjYWIyZDYiLCAiIzZhM2Q5YSIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLCBjb2xvciA9ICJibGFjayIpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzLCA0LWZhY3RvciBzb2x1dGlvbjogVlQgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiRmFjdG9yIHNjb3JlIikKYGBgCgoKIyMgVlQgQ2hpbGRyZW4KCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CmhlYXRtYXBfZnVuKGRfdnRfY2hfMjMsIG1heF9mYWN0X2Z1bihuY29sKGRfdnRfY2hfMjMpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IFZUIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF92dF9jaF8yMywgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfdnRfY2hfMjMsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdnRfY2hfMjMsIHJldGVuX2ZhY3RfZnVuKGRfdnRfY2hfMjMsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IFZUIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF92dF9jaF8yM19wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX3Z0X2NoXzIzKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3Z0X2NoXzIzX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgMy1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3Z0X2NoXzIzX2JpYyA8LSBWU1MoZF92dF9jaF8yMywgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfdnRfY2hfMjMpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF92dF9jaF8yM19iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdnRfY2hfMjMsIDIsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtaW5pbWl6aW5nIEJJQzogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmNsdXN0ZXJfZnVuKGRfdnRfY2hfMjMsIHJldGVuX2ZhY3RfZnVuKGRfdnRfY2hfMjMsICJvYmxpbWluIiksIHJvdCA9ICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIyBBdHRyaWJ1dGlvbnMgdG8gY2hhcmFjdGVycwoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjl9CmZhKGRfdnRfY2hfMjMsIDQsICJvYmxpbWluIikkc2NvcmVzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZSgidmFudWF0dSIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLXN1YmlkKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVkFOVUFUVS9iZWV0bGVzX3ZhbnVhdHVfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZ3N1YigiY3JpY2tldHMiLCAiYmVldGxlcyIsIGNoYXJhY3RlciksCiAgICAgICAgIGNoYXJhY3RlciA9IGdzdWIoImJlZXRsZXMiLCAiYmVldGxlcyoiLCBjaGFyYWN0ZXIpKSAlPiUKICBncm91cF9ieShjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjZWxsIHBob25lcyIsICJyb2NrcyIsICJmbG93ZXJzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGVzKiIsICJjaGlja2VucyIsICJtaWNlIiwgImRvZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIiwgInBpZ3MiLCAiZ2hvc3RzIiwgIkdvZCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gTWVhbiwgeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIsIAogICAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoZ3VpZGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2IxNTkyOCIsICIjY2FiMmQ2IiwgIiM2YTNkOWEiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSAiYmxhY2siKSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcywgNC1mYWN0b3Igc29sdXRpb246IFZUIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiRmFjdG9yIHNjb3JlIikKYGBgCgoKIyMgQ29uZ3J1ZW5jZSBhY3Jvc3Mgc2l0ZXMgYW5kIGFnZSBncm91cHMKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMX0KY29uZzIzIDwtIGZhLmNvbmdydWVuY2UobGlzdCgKICBsb2FkaW5nc19mdW4oZF91c19hZF9waWxvdF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidXNfYWQiKSwKICBsb2FkaW5nc19mdW4oZF9naF9jaF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAiZ2hfY2giKSwKICBsb2FkaW5nc19mdW4oZF90aF9hZF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfYWQiKSwKICBsb2FkaW5nc19mdW4oZF90aF9jaF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfY2giKSwKICBsb2FkaW5nc19mdW4oZF92dF9hZF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidnRfYWQiKSwKICBsb2FkaW5nc19mdW4oZF92dF9jaF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidnRfY2giKSkpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImZhY3RvckEiKSAlPiUKICBnYXRoZXIoZmFjdG9yQiwgY29uZ3J1ZW5jZSwgLWZhY3RvckEpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJmYWN0b3IiKSksCiAgICAgICAgICAgIGZ1bnMoZmFjdG9yKC4sIGxldmVscyA9IGMoInVzX2FkX01SMSIsICJ1c19hZF9NUjIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNfYWRfTVIzIiwgInVzX2FkX01SNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdoX2NoX01SMSIsICJnaF9jaF9NUjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnaF9jaF9NUjMiLCAiZ2hfY2hfTVI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhfYWRfTVIxIiwgInRoX2FkX01SMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoX2FkX01SMyIsICJ0aF9hZF9NUjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aF9jaF9NUjEiLCAidGhfY2hfTVIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhfY2hfTVIzIiwgInRoX2NoX01SNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZ0X2FkX01SMSIsICJ2dF9hZF9NUjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2dF9hZF9NUjMiLCAidnRfYWRfTVI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidnRfY2hfTVIxIiwgInZ0X2NoX01SMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZ0X2NoX01SMyIsICJ2dF9jaF9NUjQiKSkpKQoKZ2dwbG90KGNvbmcyMywgYWVzKHggPSBmYWN0b3JBLCB5ID0gZmFjdG9yQiwKICAgICAgICAgICBmaWxsID0gY29uZ3J1ZW5jZSwgbGFiZWwgPSByb3VuZChjb25ncnVlbmNlLCAyKSkpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV90ZXh0KHNpemUgPSAyKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gNC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gOC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMTIuNSwgbHR5ID0gMiwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDE2LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAyMC41LCBsdHkgPSAyLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMjQuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDQuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDguNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDEyLjUsIGx0eSA9IDIsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAxNi41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMjAuNSwgbHR5ID0gMiwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDI0LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkR3kiLCBsaW1pdHMgPSBjKC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDMwKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSkpICsKICBsYWJzKHRpdGxlID0gIkNvbmdydWVuY2UgYmV0d2VlbiA0LWZhY3RvciBzb2x1dGlvbnMgYWNyb3NzIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LCBpbmNsdWRlID0gRn0KbG9hZGluZ3NfMjMgPC0gZGF0YS5mcmFtZSgKICBsb2FkaW5nc19mdW4oZF91c19hZF9waWxvdF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidXNfYWQiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihkX2doX2NoXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJnaF9jaCIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKGRfdGhfYWRfMjMsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInRoX2FkIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4oZF90aF9jaF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfY2giKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihkX3Z0X2FkXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ2dF9hZCIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKGRfdnRfY2hfMjMsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInZ0X2NoIikpICU+JQogIHJlbmFtZSgidXNfYWRfQk9EWSIgPSB1c19hZF9NUjEsICJ1c19hZF9IRUFSVCIgPSB1c19hZF9NUjIsCiAgICAgICAgICJ1c19hZF9NSU5EIiA9IHVzX2FkX01SMywgInVzX2FkX2FuZ2VyIiA9IHVzX2FkX01SNCwKICAgICAgICAgImdoX2NoX0JPRFlIRUFSVCIgPSBnaF9jaF9NUjEsICJnaF9jaF9NSU5ESEVBUlQiID0gZ2hfY2hfTVIyLAogICAgICAgICAiZ2hfY2hfYWRkc3VidHJhY3QiID0gZ2hfY2hfTVIzLCAiZ2hfY2hfbm9uZSIgPSBnaF9jaF9NUjQsCiAgICAgICAgICJ0aF9hZF9IRUFSVCIgPSB0aF9hZF9NUjEsICJ0aF9hZF9CT0RZMSIgPSB0aF9hZF9NUjIsCiAgICAgICAgICJ0aF9hZF9NSU5EIiA9IHRoX2FkX01SMywgInRoX2FkX0JPRFkyIiA9IHRoX2FkX01SNCwKICAgICAgICAgInRoX2NoX0JPRFkiID0gdGhfY2hfTVIxLCAidGhfY2hfTUlORCIgPSB0aF9jaF9NUjIsCiAgICAgICAgICJ0aF9jaF9IRUFSVDEiID0gdGhfY2hfTVIzLCAidGhfY2hfSEVBUlQyIiA9IHRoX2NoX01SNCwKICAgICAgICAgInZ0X2FkX0JPRFkiID0gdnRfYWRfTVIxLCAidnRfYWRfSEVBUlQiID0gdnRfYWRfTVIyLAogICAgICAgICAidnRfYWRfTUlORDEiID0gdnRfYWRfTVIzLCAidnRfYWRfTUlORDIiID0gdnRfYWRfTVI0LAogICAgICAgICAidnRfY2hfQk9EWSIgPSB2dF9jaF9NUjEsICJ2dF9jaF9NSU5EIiA9IHZ0X2NoX01SMiwKICAgICAgICAgInZ0X2NoX0hFQVJUIiA9IHZ0X2NoX01SMywgInZ0X2NoX25vbmUiID0gdnRfY2hfTVI0KQoKIyBkbyBjbHVzdGVyIGFuYWx5c2lzIG9uIGZhY3RvciBsb2FkaW5ncwpsb2FkaW5nc18yMyAlPiUKICB0KCkgJT4lCiAgZGlzdCgpICU+JQogIGhjbHVzdCgpICU+JQogIGFzLmRlbmRyb2dyYW0oKSAlPiUKICBzZXQoImxhYmVsc19jb2wiLCB2YWx1ZSA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLAogICAgICBrID0gNikgJT4lCiAgc2V0KCJicmFuY2hlc19sd2QiLCAwLjUpICU+JQogIGFzLmdnZGVuZCgpICU+JQogIGdncGxvdChob3JpeiA9IEYpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMiwgMykpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIG9mIGZhY3RvcnM6IEFsbCBzYW1wbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCgojIGRvIGZhY3RvciBhbmFseXNpcyBvbiBmYWN0b3IgbG9hZGluZ3MKaGVhdG1hcF9mdW4obG9hZGluZ3NfMjMsIHJldGVuX2ZhY3RfZnVuKGxvYWRpbmdzXzIzLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpCiMgZmEucGFyYWxsZWwobG9hZGluZ3NfMjMpCmhlYXRtYXBfZnVuKGxvYWRpbmdzXzIzLCAzLCAib2JsaW1pbiIpCgojIGRvIGNsdXN0ZXIgYW5hbHlzaXMgb24gZmFjdG9yIGxvYWRpbmdzIGFmdGVyIGZhY3RvciBhbmFseXNpcwpmYShsb2FkaW5nc18yMywgcmV0ZW5fZmFjdF9mdW4obG9hZGluZ3NfMjMsICJvYmxpbWluIiksICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgZGlzdCgpICU+JQogIGhjbHVzdCgpICU+JQogIGFzLmRlbmRyb2dyYW0oKSAlPiUKICBzZXQoImxhYmVsc19jb2wiLCB2YWx1ZSA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLAogICAgICBrID0gNikgJT4lCiAgc2V0KCJicmFuY2hlc19sd2QiLCAwLjUpICU+JQogIGFzLmdnZGVuZCgpICU+JQogIGdncGxvdChob3JpeiA9IEYpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMiwgMikpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIG9mIGZhY3RvcnM6IEFsbCBzYW1wbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMgTWFzdGVyIEVGQQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpkX2FsbF8yMyA8LSBkX3VzX2FkX3BpbG90XzIzICU+JQogIGJpbmRfcm93cyhkX2doX2NoXzIzKSAlPiUKICBiaW5kX3Jvd3MoZF90aF9hZF8yMykgJT4lCiAgYmluZF9yb3dzKGRfdGhfY2hfMjMpICU+JQogIGJpbmRfcm93cyhkX3Z0X2FkXzIzKSAlPiUKICBiaW5kX3Jvd3MoZF92dF9jaF8yMykKCmhlYXRtYXBfZnVuKGRfYWxsXzIzLCByZXRlbl9mYWN0X2Z1bihkX2FsbF8yMywgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogQWxsIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCgojIGZhLnBhcmFsbGVsKGRfYWxsXzIzKQoKaGVhdG1hcF9mdW4oZF9hbGxfMjMsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBwYXJhbGxlbCBhbmFseXNpcyAmIG1pbmltaXppbmcgQklDOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKCiMgVlNTKGRfYWxsXzIzKQoKaGVhdG1hcF9mdW4oZF9hbGxfMjMsIDMsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCAzLWZhY3RvciBzb2x1dGlvbjogQWxsIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKCiMgRXhjbHVkaW5nICJhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMiCgpgYGB7ciwgaW5jbHVkZSA9IEYsIHdhcm5pbmcgPSBGQUxTRX0KZF91c19hZF9waWxvdF8yMiA8LSBkX3VzX2FkX3BpbG90XzIzICU+JSBzZWxlY3QoLWBhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnNgKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRiwgd2FybmluZyA9IEZBTFNFfQojIyBVUyBhZHVsdHM6IE5PVCBZRVQgUlVOCiMjIFVTIGNoaWxkcmVuOiBOT1QgWUVUIFJVTgoKIyMgR0ggYWR1bHRzOiBOT1QgWUVUIFJVTgojIyBHSCBjaGlsZHJlbgpkX2doX2NoXzIyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX0dIQU5BL2JlZXRsZXNfZ2hhbmFfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5LCBleF9hZGRzdWIgPSBUUlVFKQoKIyMgQ0ggYWR1bHRzOiBOT1QgWUVUIFJVTgojIyBDSCBjaGlsZHJlbjogTk9UIFlFVCBSVU4KCiMjIFRIIGFkdWx0cwpkX3RoX2FkXzIyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1RIQUlMQU5EL2JlZXRsZXNfdGhhaWxhbmRfYWR1bHRzX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgY2xlYW5fZnVuKGtleSA9IHF1ZXN0aW9uX2tleSwgZXhfYWRkc3ViID0gVFJVRSkKIyMgVEggY2hpbGRyZW4KZF90aF9jaF8yMiA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9USEFJTEFORC9iZWV0bGVzX3RoYWlsYW5kX2NoaWxkcmVuX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgY2xlYW5fZnVuKGtleSA9IHF1ZXN0aW9uX2tleSwgZXhfYWRkc3ViID0gVFJVRSkKCiMjIFZUIGFkdWx0cwpkX3Z0X2FkXzIyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1ZBTlVBVFUvYmVldGxlc192YW51YXR1X2FkdWx0c190aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGNsZWFuX2Z1bihrZXkgPSBxdWVzdGlvbl9rZXksIGV4X2FkZHN1YiA9IFRSVUUpCiMjIFZUIGNoaWxkcmVuCmRfdnRfY2hfMjIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVkFOVUFUVS9iZWV0bGVzX3ZhbnVhdHVfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5LCBleF9hZGRzdWIgPSBUUlVFKQpgYGAKCiMjIFVTIEFkdWx0czogTVR1cmsgcGlsb3QKCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CmhlYXRtYXBfZnVuKGRfdXNfYWRfcGlsb3RfMjIsIG1heF9mYWN0X2Z1bihuY29sKGRfdXNfYWRfcGlsb3RfMjIpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF91c19hZF9waWxvdF8yMiwgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBVUyBBZHVsdHMgKE1UdXJrIFBpbG90KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfdXNfYWRfcGlsb3RfMjIsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdXNfYWRfcGlsb3RfMjIsIHJldGVuX2ZhY3RfZnVuKGRfdXNfYWRfcGlsb3RfMjIsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF91c19hZF9waWxvdF8yMl9wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX3VzX2FkX3BpbG90XzIyKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3VzX2FkX3BpbG90XzIyX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgMy1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3VzX2FkX3BpbG90XzIyX2JpYyA8LSBWU1MoZF91c19hZF9waWxvdF8yMiwgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfdXNfYWRfcGlsb3RfMjIpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF91c19hZF9waWxvdF8yMl9iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6IFNlZSAzLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF91c19hZF9waWxvdF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF91c19hZF9waWxvdF8yMiwgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMjIEF0dHJpYnV0aW9ucyB0byBjaGFyYWN0ZXJzCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZmEoZF91c19hZF9waWxvdF8yMiwgNCwgIm9ibGltaW4iKSRzY29yZXNbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtc3ViaWQpICU+JQogIGZ1bGxfam9pbihyZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9ERVZFTE9QTUVOVEFMIFRBU0tTL2JlZXRsZXM6ZGlta2lkOmZhY3RvcnMvYW5hbHlzaXMvX1VTIHBpbG90L2JlZXRsZXNfcGlsb3QyX3RpZHkuY3N2IikgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJiZWV0bGVzIikgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNlbGwgcGhvbmVzIiwgInJvY2tzIiwgImZsb3dlcnMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZXMiLCAiY2hpY2tlbnMiLCAibWljZSIsICJkb2dzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIsICJwaWdzIiwgImdob3N0cyIsICJHb2QiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGNoYXJhY3RlciwgeSA9IE1lYW4sIHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyLCAKICAgICAgICAgICAgIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX3BvaW50cmFuZ2UoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKGd1aWRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjYWIyZDYiLCAiIzZhM2Q5YSIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLCBjb2xvciA9ICJibGFjayIpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzLCA0LWZhY3RvciBzb2x1dGlvbjogVVMgQWR1bHRzIChNVHVyayBQaWxvdCkiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICJGYWN0b3Igc2NvcmUiKQpgYGAKCgojIyBVUyBBZHVsdHM6IG5vdCB5ZXQgcnVuCgojIyBVUyBDaGlsZHJlbjogbm90IHlldCBydW4KCiMjIEdIIEFkdWx0czogbm90IHlldCBydW4KCiMjIEdIIENoaWxkcmVuCgojIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA5LCBmaWcuYXNwID0gMC40fQpoZWF0bWFwX2Z1bihkX2doX2NoXzIyLCBtYXhfZmFjdF9mdW4obmNvbChkX2doX2NoXzIyKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgNCBmYWN0b3JzLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfZ2hfY2hfMjIsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogR0ggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX2doX2NoXzIyLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX2doX2NoXzIyLCByZXRlbl9mYWN0X2Z1bihkX2doX2NoXzIyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfZ2hfY2hfMjJfcGFyYWxsZWwgPC0gZmEucGFyYWxsZWwoZF9naF9jaF8yMikKYGBgCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF9naF9jaF8yMl9wYXJhbGxlbCRuZmFjdGAgZmFjdG9yczogU2VlIDItZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF9naF9jaF8yMl9iaWMgPC0gVlNTKGRfZ2hfY2hfMjIsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX2doX2NoXzIyKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKTWluaW1pemluZyBCSUMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfZ2hfY2hfMjJfYmljJHZzcy5zdGF0cyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJuZmFjdCIpICU+JSBmaWx0ZXIoQklDID09IG1pbihCSUMpKSAlPiUgc2VsZWN0KG5mYWN0KSAlPiUgYXMubnVtZXJpYygpYCBmYWN0b3JzOiBTZWUgMi1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKIyMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmNsdXN0ZXJfZnVuKGRfZ2hfY2hfMjIsIHJldGVuX2ZhY3RfZnVuKGRfZ2hfY2hfMjIsICJvYmxpbWluIiksIHJvdCA9ICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIyBBdHRyaWJ1dGlvbnMgdG8gY2hhcmFjdGVycwoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjl9CmZhKGRfZ2hfY2hfMjIsIDQsICJvYmxpbWluIikkc2NvcmVzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZSgiZ2hhbmEiLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX0dIQU5BL2JlZXRsZXNfZ2hhbmFfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSkgJT4lCiAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyIsICJjaGlja2VucyIsICJtaWNlIiwgImRvZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIiwgInBpZ3MiLCAiZ2hvc3RzIiwgIkdvZCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gTWVhbiwgeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIsIAogICAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoZ3VpZGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMsIDQtZmFjdG9yIHNvbHV0aW9uOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKCiMjIFRIIEFkdWx0cwoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuNH0KaGVhdG1hcF9mdW4oZF90aF9hZF8yMiwgbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9hZF8yMikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVEggQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF90aF9hZF8yMiwgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX3RoX2FkXzIyLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3RoX2FkXzIyLCByZXRlbl9mYWN0X2Z1bihkX3RoX2FkXzIyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3RoX2FkXzIyX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdGhfYWRfMjIpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdGhfYWRfMjJfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IFNlZSAzLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdGhfYWRfMjJfYmljIDwtIFZTUyhkX3RoX2FkXzIyLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9hZF8yMikpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3RoX2FkXzIyX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9hZF8yMiwgMiwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmNsdXN0ZXJfZnVuKGRfdGhfYWRfMjIsIHJldGVuX2ZhY3RfZnVuKGRfdGhfYWRfMjIsICJvYmxpbWluIiksIHJvdCA9ICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyMgQXR0cmlidXRpb25zIHRvIGNoYXJhY3RlcnMKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpmYShkX3RoX2FkXzIyLCA0LCAib2JsaW1pbiIpJHNjb3Jlc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgbXV0YXRlKHN1YmlkID0gcGFzdGUoInRoYWlsYW5kIiwgc3ViaWQsIHNlcCA9ICJfIikpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtc3ViaWQpICU+JQogIGZ1bGxfam9pbihyZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9USEFJTEFORC9iZWV0bGVzX3RoYWlsYW5kX2FkdWx0c190aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlcikpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNlbGwgcGhvbmVzIiwgInJvY2tzIiwgImZsb3dlcnMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZXMiLCAiY2hpY2tlbnMiLCAibWljZSIsICJkb2dzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIsICJwaWdzIiwgImdob3N0cyIsICJHb2QiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGNoYXJhY3RlciwgeSA9IE1lYW4sIHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyLCAKICAgICAgICAgICAgIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX3BvaW50cmFuZ2UoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKGd1aWRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjYWIyZDYiLCAiIzZhM2Q5YSIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLCBjb2xvciA9ICJibGFjayIpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzLCA0LWZhY3RvciBzb2x1dGlvbjogVEggQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiRmFjdG9yIHNjb3JlIikKYGBgCgoKIyMgVEggQ2hpbGRyZW4KCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CmhlYXRtYXBfZnVuKGRfdGhfY2hfMjIsIG1heF9mYWN0X2Z1bihuY29sKGRfdGhfY2hfMjIpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF90aF9jaF8yMiwgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBUSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfdGhfY2hfMjIsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdGhfY2hfMjIsIHJldGVuX2ZhY3RfZnVuKGRfdGhfY2hfMjIsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF90aF9jaF8yMl9wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX3RoX2NoXzIyKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3RoX2NoXzIyX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgNC1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3RoX2NoXzIyX2JpYyA8LSBWU1MoZF90aF9jaF8yMiwgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfdGhfY2hfMjIpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF90aF9jaF8yMl9iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdGhfY2hfMjIsIDMsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtaW5pbWl6aW5nIEJJQzogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmNsdXN0ZXJfZnVuKGRfdGhfY2hfMjIsIHJldGVuX2ZhY3RfZnVuKGRfdGhfY2hfMjIsICJvYmxpbWluIiksIHJvdCA9ICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBUSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIyBBdHRyaWJ1dGlvbnMgdG8gY2hhcmFjdGVycwoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjl9CmZhKGRfdGhfY2hfMjIsIDQsICJvYmxpbWluIikkc2NvcmVzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZSgidGhhaWxhbmQiLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1RIQUlMQU5EL2JlZXRsZXNfdGhhaWxhbmRfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpKSAlPiUKICBncm91cF9ieShjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjZWxsIHBob25lcyIsICJyb2NrcyIsICJmbG93ZXJzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGVzIiwgImNoaWNrZW5zIiwgIm1pY2UiLCAiZG9ncyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iLCAicGlncyIsICJnaG9zdHMiLCAiR29kIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjaGFyYWN0ZXIsIHkgPSBNZWFuLCB5bWluID0gTG93ZXIsIHltYXggPSBVcHBlciwgCiAgICAgICAgICAgICBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yKSArCiAgZ2VvbV9wb2ludHJhbmdlKCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbChndWlkZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSAiYmxhY2siKSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcywgNC1mYWN0b3Igc29sdXRpb246IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiRmFjdG9yIHNjb3JlIikKYGBgCgoKIyMgQ0ggQWR1bHRzOiBub3QgeWV0IHJ1bgoKIyMgQ0ggQ2hpbGRyZW46IG5vdCB5ZXQgcnVuCgojIyBWVCBBZHVsdHMKCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CmhlYXRtYXBfZnVuKGRfdnRfYWRfMjIsIG1heF9mYWN0X2Z1bihuY29sKGRfdnRfYWRfMjIpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgNCBmYWN0b3JzLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdnRfYWRfMjIsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogVlQgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF92dF9hZF8yMiwgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF92dF9hZF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF92dF9hZF8yMiwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVlQgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF92dF9hZF8yMl9wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX3Z0X2FkXzIyKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3Z0X2FkXzIyX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9jaF8yMiwgMywgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIHBhcmFsbGVsIGFuYWx5c2lzOiBWVCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3Z0X2FkXzIyX2JpYyA8LSBWU1MoZF92dF9hZF8yMiwgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfdnRfYWRfMjIpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF92dF9hZF8yMl9iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6IFNlZSAyLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF92dF9hZF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF92dF9hZF8yMiwgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIyBBdHRyaWJ1dGlvbnMgdG8gY2hhcmFjdGVycwoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjl9CmZhKGRfdnRfYWRfMjIsIDQsICJvYmxpbWluIikkc2NvcmVzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZSgidmFudWF0dSIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLXN1YmlkKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVkFOVUFUVS9iZWV0bGVzX3ZhbnVhdHVfYWR1bHRzX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGdzdWIoImNyaWNrZXRzIiwgImJlZXRsZXMiLCBjaGFyYWN0ZXIpLAogICAgICAgICBjaGFyYWN0ZXIgPSBnc3ViKCJiZWV0bGVzIiwgImJlZXRsZXMqIiwgY2hhcmFjdGVyKSkgJT4lCiAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyoiLCAiY2hpY2tlbnMiLCAibWljZSIsICJkb2dzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIsICJwaWdzIiwgImdob3N0cyIsICJHb2QiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGNoYXJhY3RlciwgeSA9IE1lYW4sIHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyLCAKICAgICAgICAgICAgIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX3BvaW50cmFuZ2UoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKGd1aWRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNiMTU5MjgiLCAiI2NhYjJkNiIsICIjNmEzZDlhIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMsIDQtZmFjdG9yIHNvbHV0aW9uOiBWVCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICJGYWN0b3Igc2NvcmUiKQpgYGAKCgojIyBWVCBDaGlsZHJlbgoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuNH0KaGVhdG1hcF9mdW4oZF92dF9jaF8yMiwgbWF4X2ZhY3RfZnVuKG5jb2woZF92dF9jaF8yMikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3Z0X2NoXzIyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IFZUIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF92dF9jaF8yMiwgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF92dF9jaF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF92dF9jaF8yMiwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3Z0X2NoXzIyX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdnRfY2hfMjIpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdnRfY2hfMjJfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IFNlZSAzLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdnRfY2hfMjJfYmljIDwtIFZTUyhkX3Z0X2NoXzIyLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF92dF9jaF8yMikpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3Z0X2NoXzIyX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF92dF9jaF8yMiwgMiwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF92dF9jaF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF92dF9jaF8yMiwgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFZUIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMjIEF0dHJpYnV0aW9ucyB0byBjaGFyYWN0ZXJzCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZmEoZF92dF9jaF8yMiwgNCwgIm9ibGltaW4iKSRzY29yZXNbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ2YW51YXR1Iiwgc3ViaWQsIHNlcCA9ICJfIikpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtc3ViaWQpICU+JQogIGZ1bGxfam9pbihyZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9WQU5VQVRVL2JlZXRsZXNfdmFudWF0dV9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlcikpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBnc3ViKCJjcmlja2V0cyIsICJiZWV0bGVzIiwgY2hhcmFjdGVyKSwKICAgICAgICAgY2hhcmFjdGVyID0gZ3N1YigiYmVldGxlcyIsICJiZWV0bGVzKiIsIGNoYXJhY3RlcikpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNlbGwgcGhvbmVzIiwgInJvY2tzIiwgImZsb3dlcnMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZXMqIiwgImNoaWNrZW5zIiwgIm1pY2UiLCAiZG9ncyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iLCAicGlncyIsICJnaG9zdHMiLCAiR29kIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjaGFyYWN0ZXIsIHkgPSBNZWFuLCB5bWluID0gTG93ZXIsIHltYXggPSBVcHBlciwgCiAgICAgICAgICAgICBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yKSArCiAgZ2VvbV9wb2ludHJhbmdlKCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbChndWlkZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjYjE1OTI4IiwgIiNjYWIyZDYiLCAiIzZhM2Q5YSIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLCBjb2xvciA9ICJibGFjayIpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzLCA0LWZhY3RvciBzb2x1dGlvbjogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICJGYWN0b3Igc2NvcmUiKQpgYGAKCiMjIENvbmdydWVuY2UgYWNyb3NzIHNpdGVzIGFuZCBhZ2UgZ3JvdXBzCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDF9CmNvbmcyMiA8LSBmYS5jb25ncnVlbmNlKGxpc3QoCiAgbG9hZGluZ3NfZnVuKGRfdXNfYWRfcGlsb3RfMjIsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInVzX2FkIiksCiAgbG9hZGluZ3NfZnVuKGRfZ2hfY2hfMjIsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gImdoX2NoIiksCiAgbG9hZGluZ3NfZnVuKGRfdGhfYWRfMjIsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInRoX2FkIiksCiAgbG9hZGluZ3NfZnVuKGRfdGhfY2hfMjIsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInRoX2NoIiksCiAgbG9hZGluZ3NfZnVuKGRfdnRfYWRfMjIsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInZ0X2FkIiksCiAgbG9hZGluZ3NfZnVuKGRfdnRfY2hfMjIsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInZ0X2NoIikpKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJmYWN0b3JBIikgJT4lCiAgZ2F0aGVyKGZhY3RvckIsIGNvbmdydWVuY2UsIC1mYWN0b3JBKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiZmFjdG9yIikpLAogICAgICAgICAgICBmdW5zKGZhY3RvciguLCBsZXZlbHMgPSBjKCJ1c19hZF9NUjEiLCAidXNfYWRfTVIyIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzX2FkX01SMyIsICJ1c19hZF9NUjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnaF9jaF9NUjEiLCAiZ2hfY2hfTVIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2hfY2hfTVIzIiwgImdoX2NoX01SNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoX2FkX01SMSIsICJ0aF9hZF9NUjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aF9hZF9NUjMiLCAidGhfYWRfTVI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhfY2hfTVIxIiwgInRoX2NoX01SMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoX2NoX01SMyIsICJ0aF9jaF9NUjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2dF9hZF9NUjEiLCAidnRfYWRfTVIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidnRfYWRfTVIzIiwgInZ0X2FkX01SNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZ0X2NoX01SMSIsICJ2dF9jaF9NUjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2dF9jaF9NUjMiLCAidnRfY2hfTVI0IikpKSkKCmdncGxvdChjb25nMjIsIGFlcyh4ID0gZmFjdG9yQSwgeSA9IGZhY3RvckIsCiAgICAgICAgICAgZmlsbCA9IGNvbmdydWVuY2UsIGxhYmVsID0gcm91bmQoY29uZ3J1ZW5jZSwgMikpKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdGV4dChzaXplID0gMikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDQuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDguNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDEyLjUsIGx0eSA9IDIsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxNi41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMjAuNSwgbHR5ID0gMiwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDI0LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA0LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA4LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAxMi41LCBsdHkgPSAyLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMTYuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDIwLjUsIGx0eSA9IDIsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAyNC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZEd5IiwgbGltaXRzID0gYygtMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAzMCkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJDb25ncnVlbmNlIGJldHdlZW4gNC1mYWN0b3Igc29sdXRpb25zIGFjcm9zcyBzYW1wbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KIyBsYWJlbCBlYWNoIGZhY3RvciBieSBjb25ncnVlbmNlIHdpdGggdXMgYWR1bHQgZmFjdG9ycwpjb25nMjJfbGFiZWwgPC0gY29uZzIyICU+JQogIG11dGF0ZShzaXRlID0gdG91cHBlcihnc3ViKCJfLiokIiwgIiIsIGZhY3RvckEpKSwKICAgICAgICAgYWdlID0gY2FzZV93aGVuKGdyZXBsKCJfYWRfIiwgZmFjdG9yQSkgfiAiYWR1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJfY2hfIiwgZmFjdG9yQSkgfiAiY2hpbGRyZW4iKSkgJT4lCiAgZmlsdGVyKGdyZXBsKCJ1c19hZF8iLCBmYWN0b3JCKSwgIWdyZXBsKCJNUjQiLCBmYWN0b3JCKSkgJT4lCiAgbXV0YXRlKHVzX2FkX2ZhY3RvciA9IHJlY29kZV9mYWN0b3IoZmFjdG9yQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNfYWRfTVIxIiA9ICJCT0RZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNfYWRfTVIyIiA9ICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzX2FkX01SMyIgPSAiTUlORCIpLAogICAgICAgICB1c19hZF9mYWN0b3JfbGFiID0gcGFzdGUoZmFjdG9yQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzX2FkX2ZhY3RvciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQocm91bmQoY29uZ3J1ZW5jZSwgMiksIGRpZ2l0cyA9IDIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcCA9ICJfIikpICU+JQogIGdyb3VwX2J5KHNpdGUsIGFnZSwgZmFjdG9yQSkgJT4lCiAgdG9wX24oMSwgYWJzKGNvbmdydWVuY2UpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LCBpbmNsdWRlID0gRn0KbG9hZGluZ3NfMjIgPC0gZGF0YS5mcmFtZSgKICAgIGxvYWRpbmdzX2Z1bihkX3VzX2FkX3BpbG90XzIyLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ1c19hZCIpLAogIGxvYWRpbmdzX2Z1bihkX2doX2NoXzIyLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJnaF9jaCIpLAogIGxvYWRpbmdzX2Z1bihkX3RoX2FkXzIyLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ0aF9hZCIpLAogIGxvYWRpbmdzX2Z1bihkX3RoX2NoXzIyLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ0aF9jaCIpLAogIGxvYWRpbmdzX2Z1bihkX3Z0X2FkXzIyLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ2dF9hZCIpLAogIGxvYWRpbmdzX2Z1bihkX3Z0X2NoXzIyLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ2dF9jaCIpKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvckEsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZnVsbF9qb2luKGNvbmcyMl9sYWJlbCAlPiUgc2VsZWN0KGZhY3RvckEsIHVzX2FkX2ZhY3Rvcl9sYWIpKSAlPiUKICAjIHJlbmFtZSgidXNfYWRfQk9EWSIgPSB1c19hZF9NUjEsICJ1c19hZF9IRUFSVCIgPSB1c19hZF9NUjIsCiAgIyAgICAgICAgInVzX2FkX01JTkQiID0gdXNfYWRfTVIzLCAidXNfYWRfYW5nZXIiID0gdXNfYWRfTVI0LAogICMgICAgICAgICJnaF9jaF9CT0RZSEVBUlQiID0gZ2hfY2hfTVIxLCAiZ2hfY2hfTUlOREhFQVJUIiA9IGdoX2NoX01SMiwKICAjICAgICAgICAiZ2hfY2hfcHJheWVyIiA9IGdoX2NoX01SMywgImdoX2NoX3NoeW5lc3MiID0gZ2hfY2hfTVI0LAogICMgICAgICAgICJ0aF9hZF9IRUFSVCIgPSB0aF9hZF9NUjEsICJ0aF9hZF9CT0RZIiA9IHRoX2FkX01SMiwKICAjICAgICAgICAidGhfYWRfTUlORCIgPSB0aF9hZF9NUjMsICJ0aF9hZF9jaG9pY2UiID0gdGhfYWRfTVI0LAogICMgICAgICAgICJ0aF9jaF9CT0RZIiA9IHRoX2NoX01SMSwgInRoX2NoX01JTkQiID0gdGhfY2hfTVIyLAogICMgICAgICAgICJ0aF9jaF9IRUFSVDEiID0gdGhfY2hfTVIzLCAidGhfY2hfSEVBUlQyIiA9IHRoX2NoX01SNCwKICAjICAgICAgICAidnRfYWRfTUlORCIgPSB2dF9hZF9NUjEsICJ2dF9hZF9CT0RZIiA9IHZ0X2FkX01SMiwKICAjICAgICAgICAidnRfYWRfSEVBUlQyIiA9IHZ0X2FkX01SMywgInZ0X2FkX0hFQVJUMSIgPSB2dF9hZF9NUjQsCiAgIyAgICAgICAgInZ0X2NoX0JPRFkiID0gdnRfY2hfTVIxLCAidnRfY2hfTUlORCIgPSB2dF9jaF9NUjIsCiAgIyAgICAgICAgInZ0X2NoX0hFQVJUIiA9IHZ0X2NoX01SMywgInZ0X2NoX25vbmUiID0gdnRfY2hfTVI0KSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCB1c19hZF9mYWN0b3JfbGFiLCBsb2FkaW5nKSAlPiUKICBzcHJlYWQodXNfYWRfZmFjdG9yX2xhYiwgbG9hZGluZykgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpCgojIGRvIGNsdXN0ZXIgYW5hbHlzaXMgb24gZmFjdG9yIGxvYWRpbmdzCmxvYWRpbmdzXzIyICU+JQogIHQoKSAlPiUKICBkaXN0KCkgJT4lCiAgaGNsdXN0KCkgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2U0MWExYyIsICIjMzc3ZWI4IiwgIiM0ZGFmNGEiLCAiIzk4NGVhMyIpLCAKICAgICAgayA9IDQpICU+JSAKICAjIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLAogICMgICAgIGsgPSA0KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC00LCAzKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgb2YgZmFjdG9yczogQWxsIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKCiMgZG8gZmFjdG9yIGFuYWx5c2lzIG9uIGZhY3RvciBsb2FkaW5ncwpoZWF0bWFwX2Z1bihsb2FkaW5nc18yMiwgcmV0ZW5fZmFjdF9mdW4obG9hZGluZ3NfMjIsICJvYmxpbWluIiksICJvYmxpbWluIikKIyBmYS5wYXJhbGxlbChsb2FkaW5nc18yMikKaGVhdG1hcF9mdW4obG9hZGluZ3NfMjIsIDQsICJvYmxpbWluIikKCiMgZG8gY2x1c3RlciBhbmFseXNpcyBvbiBmYWN0b3IgbG9hZGluZ3MgYWZ0ZXIgZmFjdG9yIGFuYWx5c2lzCmZhKGxvYWRpbmdzXzIyLCByZXRlbl9mYWN0X2Z1bihsb2FkaW5nc18yMiwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBkaXN0KCkgJT4lCiAgaGNsdXN0KCkgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiLCAiI2ZmZmY5OSIsICIjYjE1OTI4IiksCiAgICAgIGsgPSA0KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0zLCAyKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgb2YgZmFjdG9yczogQWxsIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnByb3BfdmFyX2Z1biA8LSBmdW5jdGlvbihkZiwgbl9mYWN0b3JzLCByb3QpewogIHZhY2MgPC0gZmEoZGYsIG5fZmFjdG9ycywgcm90KSRWYWNjb3VudGVkICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgICBmaWx0ZXIoc3RhdCA9PSAiUHJvcG9ydGlvbiBFeHBsYWluZWQiKSAlPiUKICAgIGdhdGhlcihmYWN0b3IsIHByb3BfdmFyLCAtc3RhdCkKICAKICByZXR1cm4odmFjYykKfQoKZF92YXJleHBfMjIgPC0gYmluZF9yb3dzKAogIHByb3BfdmFyX2Z1bihkX3VzX2FkX3BpbG90XzIyLCA0LCAib2JsaW1pbiIpICU+JQogICAgbXV0YXRlKHNpdGUgPSAiVVMiLCBhZ2UgPSAiYWR1bHRzIiksCiAgcHJvcF92YXJfZnVuKGRfZ2hfY2hfMjIsIDQsICJvYmxpbWluIikgJT4lCiAgICBtdXRhdGUoc2l0ZSA9ICJHSCIsIGFnZSA9ICJjaGlsZHJlbiIpLAogIHByb3BfdmFyX2Z1bihkX3RoX2FkXzIyLCA0LCAib2JsaW1pbiIpICU+JQogICAgbXV0YXRlKHNpdGUgPSAiVEgiLCBhZ2UgPSAiYWR1bHRzIiksCiAgcHJvcF92YXJfZnVuKGRfdGhfY2hfMjIsIDQsICJvYmxpbWluIikgJT4lCiAgICBtdXRhdGUoc2l0ZSA9ICJUSCIsIGFnZSA9ICJjaGlsZHJlbiIpLAogIHByb3BfdmFyX2Z1bihkX3Z0X2FkXzIyLCA0LCAib2JsaW1pbiIpICU+JQogICAgbXV0YXRlKHNpdGUgPSAiVlQiLCBhZ2UgPSAiYWR1bHRzIiksCiAgcHJvcF92YXJfZnVuKGRfdnRfY2hfMjIsIDQsICJvYmxpbWluIikgJT4lCiAgICBtdXRhdGUoc2l0ZSA9ICJWVCIsIGFnZSA9ICJjaGlsZHJlbiIpKSAlPiUKICBzZWxlY3QoLXN0YXQpICU+JQogIG11dGF0ZShmYWN0b3IgPSBwYXN0ZSh0b2xvd2VyKHNpdGUpLCBzdWJzdHIoYWdlLCAxLCAyKSwgZmFjdG9yLCBzZXAgPSAiXyIpLAogICAgICAgICBwcm9wX3Zhcl9yb3VuZCA9IGZvcm1hdChyb3VuZChwcm9wX3ZhciwgMiksIGRpZ2l0cyA9IDIpKQpgYGAKCgojIyBNYXN0ZXIgRUZBCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmRfYWxsXzIyIDwtIGRfdXNfYWRfcGlsb3RfMjIgJT4lCiAgYmluZF9yb3dzKGRfZ2hfY2hfMjIpICU+JQogIGJpbmRfcm93cyhkX3RoX2FkXzIyKSAlPiUKICBiaW5kX3Jvd3MoZF90aF9jaF8yMikgJT4lCiAgYmluZF9yb3dzKGRfdnRfYWRfMjIpICU+JQogIGJpbmRfcm93cyhkX3Z0X2NoXzIyKQoKaGVhdG1hcF9mdW4oZF9hbGxfMjIsIHJldGVuX2ZhY3RfZnVuKGRfYWxsXzIyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKCiMgZmEucGFyYWxsZWwoZF9hbGxfMjIpCgpoZWF0bWFwX2Z1bihkX2FsbF8yMiwgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIHBhcmFsbGVsIGFuYWx5c2lzOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKCiMgVlNTKGRfYWxsXzIyKQoKaGVhdG1hcF9mdW4oZF9hbGxfMjIsIDMsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtaW5pbWl6aW5nIEJJQzogQWxsIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEF0dHJpYnV0aW9ucyB0byBjaGFyYWN0ZXJzCgpgYGB7cn0KZF9hbGxfMjJfc3ViaWQgPC0gZF91c19hZF9waWxvdF8yMiAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgYmluZF9yb3dzKGRfZ2hfY2hfMjIgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJnaF9jaCIsIHN1YmlkLCBzZXAgPSAiXyIpKSkgJT4lCiAgYmluZF9yb3dzKGRfdGhfYWRfMjIgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ0aF9hZCIsIHN1YmlkLCBzZXAgPSAiXyIpKSkgJT4lCiAgYmluZF9yb3dzKGRfdGhfY2hfMjIgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ0aF9jaCIsIHN1YmlkLCBzZXAgPSAiXyIpKSkgJT4lCiAgYmluZF9yb3dzKGRfdnRfYWRfMjIgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ2dF9hZCIsIHN1YmlkLCBzZXAgPSAiXyIpKSkgJT4lCiAgYmluZF9yb3dzKGRfdnRfY2hfMjIgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ2dF9jaCIsIHN1YmlkLCBzZXAgPSAiXyIpKSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJpZCIpCgpzdWJpZHMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9UZW1wbGV0b24gR3JhbnQvREVWRUxPUE1FTlRBTCBUQVNLUy9iZWV0bGVzOmRpbWtpZDpmYWN0b3JzL2FuYWx5c2lzL19VUyBwaWxvdC9iZWV0bGVzX3BpbG90Ml90aWR5LmNzdiIpICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfR0hBTkEvYmVldGxlc19naGFuYV9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IGdzdWIoImdoYW5hIiwgImdoX2NoIiwgc3ViaWQpKSkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1RIQUlMQU5EL2JlZXRsZXNfdGhhaWxhbmRfYWR1bHRzX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgCiAgICAgICAgICAgICAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gZ3N1YigidGhhaWxhbmQiLCAidGhfYWQiLCBzdWJpZCkpKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVEhBSUxBTkQvYmVldGxlc190aGFpbGFuZF9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IGdzdWIoInRoYWlsYW5kIiwgInRoX2NoIiwgc3ViaWQpKSkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1ZBTlVBVFUvYmVldGxlc192YW51YXR1X2FkdWx0c190aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IGdzdWIoInZhbnVhdHUiLCAidnRfYWQiLCBzdWJpZCkpKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVkFOVUFUVS9iZWV0bGVzX3ZhbnVhdHVfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBnc3ViKCJ2YW51YXR1IiwgInZ0X2NoIiwgc3ViaWQpKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KZmEoZF9hbGxfMjJfc3ViaWQsIDQsICJvYmxpbWluIikkc2NvcmVzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLXN1YmlkKSAlPiUKICBmdWxsX2pvaW4oc3ViaWRzKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlcikpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBnc3ViKCJjcmlja2V0cyIsICJiZWV0bGVzIiwgY2hhcmFjdGVyKSwKICAgICAgICAgY2hhcmFjdGVyID0gZ3N1YigiYmVldGxlcyIsICJiZWV0bGVzKiIsIGNoYXJhY3RlciksCiAgICAgICAgIHNpdGUgPSB0b3VwcGVyKHN1YnN0cihzdWJpZCwgMSwgMikpLAogICAgICAgICBzaXRlID0gaWZlbHNlKHNpdGUgPT0gIlJfIiwgIlVTIiwgc2l0ZSksCiAgICAgICAgIGFnZSA9IGNhc2Vfd2hlbihncmVwbCgiX2FkXyIsIHN1YmlkKSB+ICJhZHVsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIlJfIiwgc3ViaWQpIH4gImFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiX2NoXyIsIHN1YmlkKSB+ICJjaGlsZHJlbiIpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGZhY3RvcikpICU+JQogIGdyb3VwX2J5KHNpdGUsIGFnZSwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyoiLCAiY2hpY2tlbnMiLCAibWljZSIsICJkb2dzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIsICJwaWdzIiwgImdob3N0cyIsICJHb2QiKSksCiAgICAgICAgIHNpdGUgPSBmYWN0b3Ioc2l0ZSwgbGV2ZWxzID0gYygiVVMiLCAiVEgiLCAiVlQiLCAiR0giKSksCiAgICAgICAgIGFnZSA9IGZhY3RvcihhZ2UsIGxldmVscyA9IGMoImFkdWx0cyIsICJjaGlsZHJlbiIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCAKICAgICAgICAgICAgIHkgPSBNZWFuLCB5bWluID0gTG93ZXIsIHltYXggPSBVcHBlciwgCiAgICAgICAgICAgICBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF9ncmlkKGZhY3RvciB+IGludGVyYWN0aW9uKGFnZSwgc2l0ZSkpICsKICBnZW9tX3BvaW50cmFuZ2UoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2IxNTkyOCIsICIjY2FiMmQ2IiwgIiM2YTNkOWEiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLCBjb2xvciA9ICJibGFjayIpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzLCA0LWZhY3RvciBzb2x1dGlvbjogQWxsIHNhbXBsZXMgdG8gZGF0ZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKIyBEZW1vZ3JhcGhpY3MKCmBgYHtyLCBpbmNsdWRlID0gRn0KcGFzdGUwKCJVUyBhZHVsdHMgKHBpbG90KTogIiwgZF91c19hZF9waWxvdF8yMyAlPiUgbnJvdygpKQpwYXN0ZTAoIkdIIGNoaWxkcmVuOiAiLCBkX2doX2NoXzIzICU+JSBucm93KCkpCnBhc3RlMCgiVEggYWR1bHRzOiAiLCBkX3RoX2FkXzIzICU+JSBucm93KCkpCnBhc3RlMCgiVEggYWR1bHRzOiAiLCBkX3RoX2NoXzIzICU+JSBucm93KCkpCnBhc3RlMCgiVlQgYWR1bHRzOiAiLCBkX3Z0X2FkXzIzICU+JSBucm93KCkpCnBhc3RlMCgiVlQgYWR1bHRzOiAiLCBkX3Z0X2NoXzIzICU+JSBucm93KCkpCmBgYAo=